#ifndef __BASIC_COMMAND_H
#define __BASIC_COMMAND_H

#include "utils.h"
#include "network.h"
#include "handler/command.h"
#include "db/db.h"

/**
 * @brief 响应结构体
 *
 */
typedef struct
{
    bool if_success;        /**< 是否成功 */
    char pwd[MAX_PATH_LEN]; /**< 用户当前工作目录 */
    int resp_len;           /**< 响应内容长度 */
    char *resp;             /**< 响应内容 */
} Response_t;

/**
 * @brief ls命令
 * 显示当前目录下的文件列表
 * @param resp 响应结构体
 * @param cmd 命令结构体
 * @param cli 客户端信息结构体
 * @param conn 数据库连接
 * @return int 执行结果
 *  @retval 0 成功
 *  @return -1 失败
 */
int lsCmd(Response_t *resp, Client_t *cli, MYSQL *conn);

/**
 * @brief ll命令
 * 显示当前目录下的文件详细信息
 * @param resp 响应结构体
 * @param cli 客户端信息结构体
 * @param conn 数据库连接
 * @return int 执行结果
 *  @retval 0 成功
 *  @return -1 失败
 */
int llCmd(Response_t *resp, Client_t *cli, MYSQL *conn);

/**
 * @brief cd命令
 * @todo cd ~ 时切换到用户家目录
 *
 * @param resp 响应结构体
 * @param dir_path 路径
 * @param cli 客户端信息结构体
 * @param conn 数据库连接
 * @return int 执行结果
 *  @retval 0 成功
 *  @return -1 失败
 */
int cdCmd(Response_t *resp, char *dir_path, Client_t *cli, MYSQL *conn);

/**
 * @brief pwd命令
 * 显示当前目录路径
 * @param resp 响应结构体
 * @param cli 客户端信息结构体
 * @return int 执行结果
 *  @retval 0 成功
 *  @return -1 失败
 */
int pwdCmd(Response_t *resp, Client_t *cli);

/**
 * @brief remove命令
 * @todo 删除非空目录时，需要递归删除目录下所有文件
 * 删除文件或空目录
 * @param resp 响应结构体
 * @param cmd 命令结构体
 * @param cli 客户端信息结构体
 * @param conn 数据库连接
 * @return int 执行结果
 *  @retval 0 成功
 *  @return -1 失败
 */
int removeCmd(Response_t *resp, Command_t *cmd, Client_t *cli, MYSQL *conn);

/**
 * @brief mkdir命令
 * 创建目录
 * @param resp 响应结构体
 * @param dir_name 目录名
 * @param cli 客户端信息结构体
 * @param conn 数据库连接
 * @return int 执行结果
 *  @retval 0 成功
 *  @return -1 失败
 */
int mkdirCmd(Response_t *resp, char *dir_name, Client_t *cli, MYSQL *conn);

/**
 * @brief mv命令
 * 移动文件或目录
 * @param resp 响应结构体
 * @param cmd 命令结构体
 * @param cli 客户端信息结构体
 * @param conn 数据库连接
 * @return int 执行结果
 *  @retval 0 成功
 *  @return -1 失败
 */
int mvCmd(Response_t *resp, Command_t *cmd, Client_t *cli, MYSQL *conn);

#endif /* __BASIC_COMMAND_H */